#include "ManejadorDeClientes.h"
#include <vector>
#include "Cliente.h"
#include "ArchivoUsuarios.h"
#include "Logueador.h"

ManejadorDeClientes::ManejadorDeClientes(VectorSala& vec, const unsigned& puerto)
: vecSalas(vec)
{
	puertoDeEscucha = puerto;
	estaCorriendo = false;
}

void ManejadorDeClientes::startMethod()
{
	estaCorriendo = true;
	socket.escuchar(puertoDeEscucha);
	std::vector<Cliente*> clientes;
	std::vector<Logueador*> logueadores;
	ArchivoUsuarios archivoUsuarios;


	while(estaCorriendo){
		Socket* sockCli = socket.aceptar();
		if(sockCli){
			Cliente* cliente = new Cliente(sockCli);
			clientes.push_back(cliente);
			Logueador* logueador = new Logueador(cliente, vecSalas, archivoUsuarios);
			logueador->start();
			logueadores.push_back(logueador);
		}
		else{
			estaCorriendo = false;
		}
	}

	std::vector<Logueador*>::iterator itL;
	for(itL = logueadores.begin(); itL != logueadores.end(); itL++)
		(*itL)->matar();

	for(itL = logueadores.begin(); itL != logueadores.end(); itL++){
		(*itL)->join();
		delete *itL;
	}

	std::vector<Cliente*>::iterator itC;
	for(itC = clientes.begin(); itC != clientes.end(); itC++)
		delete *itC;
}

void ManejadorDeClientes::matar()
{
	estaCorriendo = false;
	socket.shutDown(2);
}

ManejadorDeClientes::~ManejadorDeClientes()
{
}

